package com.c2b.algorithm.leetcode.base;

/**
 * <a href="https://leetcode.cn/problems/number-of-valid-clock-times/">有效时间的数目</a>
 * <p>给你一个长度为 5 的字符串 time ，表示一个电子时钟当前的时间，格式为 "hh:mm" 。最早 可能的时间是 "00:00" ，最晚 可能的时间是 "23:59" 。
 * 在字符串 time 中，被字符 ? 替换掉的数位是 未知的 ，被替换的数字可能是 0 到 9 中的任何一个。
 * 请你返回一个整数 answer ，将每一个 ? 都用 0 到 9 中一个数字替换后，可以得到的有效时间的数目。</p>
 * <pre>
 * 示例 1：
 *      输入：time = "?5:00"
 *      输出：2
 *      解释：我们可以将 ? 替换成 0 或 1 ，得到 "05:00" 或者 "15:00" 。注意我们不能替换成 2 ，因为时间 "25:00" 是无效时间。所以我们有两个选择。
 *
 * 示例 2：
 *      输入：time = "0?:0?"
 *      输出：100
 *      解释：两个 ? 都可以被 0 到 9 之间的任意数字替换，所以我们总共有 100 种选择。
 *
 * 示例 3：
 *      输入：time = "??:??"
 *      输出：1440
 *      解释：小时总共有 24 种选择，分钟总共有 60 种选择。所以总共有 24 * 60 = 1440 种选择。
 * </pre>
 * <b>提示：</b>
 * <li>time 是一个长度为 5 的有效字符串，格式为 "hh:mm" 。</li>
 * <li>"00" <= hh <= "23"</li>
 * <li>"00" <= mm <= "59"</li>
 * <li>字符串中有的数位是 '?' ，需要用 0 到 9 之间的数字替换。</li>
 *
 * @author c2b
 * @since 2023/4/14 9:45
 */
public class LC2437CountTime_S {

    public int countTime(String time) {
        int res = 1;
        char[] chars = time.toCharArray();
        // 如果第一位是 0 1，第二位可能为0-9十种情况。如果第一位为2，第二位可能为0-3四种情况
        if (chars[0] == '?') {
            // 如果第一位是?
            if (chars[1] == '?') {
                // 如果第二位是?。
                // (0，1两种情况)*(0-9)10种情况   + (2一种情况)*(0-3)四种情况
                res = 2 * 10 + 4;
            } else {
                // 如果第二位不是?。第二位大于3时，第一位只有0,1两种情况，否则有0,1,2三种情况
                if (chars[1] - '0' > 3) {
                    res = 2;
                } else {
                    res = 3;
                }
            }
        } else {
            // 如果第一位不是?
            if (chars[1] == '?') {
                // 第二位是?.需要根据第一位的情况来判断第二位的情况
                if (chars[0] - '0' == 2) {
                    // 第一位是2，有0,1,2,3四种情况
                    res = 4;
                } else {
                    // 第一位是0,1，有0-9十种情况
                    res = 10;
                }
            }
        }
        // 第四位为0-5六种情况，第五位为0-9十种情况
        if (chars[3] == '?') {
            res *= 6;
        }
        if (chars[4] == '?') {
            res *= 10;
        }
        return res;
    }

    public static void main(String[] args) {
        LC2437CountTime_S lc2437CountTime_s = new LC2437CountTime_S();
        int i = lc2437CountTime_s.countTime("??:??");
        System.out.println(i);
    }
}
